package com.fcml.pattern.single;

/**
 * @author fcml
 * @date 2018/11/3
 *
 * 双重校验锁，懒汉式最好的写法。线程安全；延迟加载；效率较高。
 *
 * 两次 if (lazySingle == null) 判断，保证现场安全。实例化对象只需要执行一次，后续访问直接判断返回实例化对象。
 */
public class TwoCheckLazySingle {
    // 私有构造
    private TwoCheckLazySingle(){}
    // 在本类中创建自身对象
    private static TwoCheckLazySingle lazySingle;

    // 提供外界访问的方法, 必须为静态方法
    public static TwoCheckLazySingle getHungrySingle() {
        if (lazySingle == null) {
            synchronized (TwoCheckLazySingle.class) {
                if (lazySingle == null)
                    lazySingle = new TwoCheckLazySingle();
            }
        }
        return lazySingle;
    }
}
